home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Musik / Misc / Amster / Source / prefs.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-05-27  |  26.8 KB  |  889 lines

  1. /*
  2. ** Preferences
  3. */
  4.  
  5. #include "include/config.h"
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10.  
  11. #include "include/mui.h"
  12. #include <mui/NListview_mcc.h>
  13. #include <libraries/asl.h>
  14.  
  15. #include "include/download.h"
  16. #include "include/gui.h"
  17. #include "include/search.h"
  18. #include "include/panel.h"
  19. #include "include/prefs.h"
  20. #include "amster_Cat.h"
  21. #include "include/protos.h"
  22.  
  23. struct prefsdata myprefs;
  24. struct prefsdata *prf = &myprefs;
  25.  
  26. int prf_eventflags[] = { 2,0,2,2,2,2,2,1 };
  27.  
  28. static struct MUI_CustomClass *QueueClass;
  29.  
  30. MUIF QueueDispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg);
  31. ULONG prf_new(struct IClass *cl, Object *obj, struct opSet *msg);
  32. void prf_set(struct prfdata *data);
  33. void prf_use(struct prfdata *data);
  34. void snd_play(char *fname);
  35. void prf_entry(struct prfdata *data);
  36.  
  37.  
  38. MUIF prf_dispatch(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
  39. {
  40.     struct prfdata *data = INST_DATA(cl,obj);
  41.  
  42.     switch(msg->MethodID) {
  43.         case OM_NEW:
  44.             return(prf_new(cl,obj,(APTR)msg));
  45.         case OM_DISPOSE:
  46.             if (QueueClass) MUI_DeleteCustomClass(QueueClass);
  47.             return(DoSuperMethodA(cl, obj, msg));
  48.         case PRF_UPDATE:
  49.             if(gui_napon) nap_sendbuf(NAPC_EMAILCHANGE,prf->email);
  50.             else MUI_Request(gui->app, gui->swin, 0L, (char *)MSG_ERROR_TITLE, (char *)MSG_OK_GAD, (char *)MSG_ERROR_UPDATEEMAIL);
  51.             return(NULL);
  52.         case PRF_OPEN:
  53.             prf_set(data);
  54.             set(obj,MUIA_Window_Open,TRUE);
  55.             return(NULL);
  56.         case PRF_USE:
  57.             prf_use(data);
  58.             set(obj,MUIA_Window_Open,FALSE);
  59.             return(NULL);
  60.         case PRF_LASTSAVED:
  61.             {
  62.             u_long tmp;
  63.             prf_setup(0, NULL);
  64.             if (prf_load("ENVARC:"AMSTER_PREFS)) {
  65.                 DoMethod(gui->searchpanel, SEARCH_SET);
  66.                 GetAttr(MUIA_Window_Open, obj, &tmp);
  67.                 if (tmp==TRUE) prf_set(data);
  68.             }
  69.             return(NULL);
  70.             }
  71.         case PRF_SAVE:
  72.             prf_use(data);
  73.             set(obj,MUIA_Window_Open,FALSE);
  74.             prf_save("ENVARC:"AMSTER_PREFS);
  75.             return(NULL);
  76.         case PRF_SAVEALL:
  77.             {
  78.             u_long tmp;
  79.             GetAttr(MUIA_Window_Open, obj, &tmp);
  80.             if (tmp==TRUE) {
  81.                 prf_use(data);
  82.             }
  83.             else prf_save("ENV:"AMSTER_PREFS);
  84.             prf_save("ENVARC:"AMSTER_PREFS);
  85.             return(NULL);
  86.             }
  87.         case PRF_CANCEL:
  88.             set(obj, MUIA_Window_Open, FALSE);
  89.             return(NULL);
  90.         case PRF_TESTSND:
  91.             {
  92.             u_long tmp;
  93.             GetAttr(MUIA_String_Acknowledge, data->EventSoundString, &tmp);
  94.             if (((char *)tmp)[0] != '\0') snd_play((char *)tmp);
  95.             return(NULL);
  96.             }
  97.         case PRF_FIREWALL:
  98.             {
  99.             u_long tmp;
  100.             GetAttr(MUIA_Selected, data->FirewallToggle, &tmp);
  101.             if(tmp==TRUE)
  102.                 set(data->PortString, MUIA_Disabled, TRUE);
  103.             else
  104.                 set(data->PortString, MUIA_Disabled, FALSE);
  105.  
  106.             return(NULL);
  107.             }
  108.         case PRF_ENTRY:
  109.             prf_entry(data);
  110.             return(NULL);
  111.         case PRF_VALIDDELAY:
  112.             {
  113.             u_long tmp;
  114.             GetAttr(MUIA_String_Integer, data->ST_QueueDelay, &tmp);
  115.             if ((int)tmp < 1) set(data->ST_QueueDelay, MUIA_String_Integer, prf->QueueDelay);
  116.             return NULL;
  117.             }
  118.     }
  119.     return(DoSuperMethodA(cl,obj,msg));
  120. }
  121.  
  122.  
  123. /*
  124. ** This is the Queue custom class, a sub class of Slider.mui. Overrides the
  125. ** MUIM_Numeric_Stringify method to implement custom display in slider gadget.
  126. */
  127.  
  128. MUIF QueueDispatcher(REG(a0) struct IClass *cl,REG(a2) Object *obj,REG(a1) Msg msg)
  129. {
  130.     if (msg->MethodID==MUIM_Numeric_Stringify)
  131.     {
  132.         struct QueueData *data = INST_DATA(cl,obj);
  133.         struct MUIP_Numeric_Stringify *m = (APTR)msg;
  134.  
  135.         if (m->value<26)
  136.         {
  137.             sprintf(data->buf,"%3ld", m->value);
  138.         }
  139.         else
  140.         {
  141.             strcpy(data->buf, MSG_PRF_QUEUE_UNLIMITED);
  142.         }
  143.         return((ULONG)data->buf);
  144.     }
  145.     return(DoSuperMethodA(cl,obj,msg));
  146. }
  147.  
  148.  
  149. ULONG prf_new(struct IClass *cl, Object *obj, struct opSet *msg)
  150. {
  151.     static char *pages[] = {
  152.         (char *)_MSG_PRF_USER_TAB,
  153.         (char *)_MSG_PRF_OPTIONS_TAB,
  154.         (char *)_MSG_PRF_EVENTS_TAB,
  155.         (char *)_MSG_PRF_ADVANCED_TAB,
  156.         NULL
  157.     };
  158.     static char *events[] = {
  159.         (char *)_MSG_PRF_EVT_START,
  160.         (char *)_MSG_PRF_EVT_EXIT,
  161.         (char *)_MSG_PRF_EVT_CONN,
  162.         (char *)_MSG_PRF_EVT_DISC,
  163.         (char *)_MSG_PRF_EVT_DLFIN,
  164.         (char *)_MSG_PRF_EVT_ULFIN,
  165.         (char *)_MSG_PRF_EVT_DLERR,
  166.         (char *)_MSG_PRF_EVT_PLAY,
  167.         NULL
  168.     };
  169.     static char *lamps[] = {
  170.         (char *)_MSG_PRF_LAMPLAMP,
  171.         (char *)_MSG_PRF_LAMPTWF,
  172.         NULL
  173.     };
  174.     static char *ServerListOpts[] = {
  175.         (char *)_MSG_PRF_SERVERLIST_FORGET,
  176.         (char *)_MSG_PRF_SERVERLIST_SAVE,
  177.         (char *)_MSG_PRF_SERVERLIST_CACHE,
  178.         NULL
  179.     };
  180.  
  181.     struct prfdata *data;
  182.     Object *UserString, *PasswordString, *EMailString, *EMailButton, *DownloadPathString, *LinkSpeedCycle;
  183.     Object *ClearListToggle, *AutoConnectToggle, *AskFileToggle, *AutoSaveToggle, *AutoAddToggle;
  184.     Object *LampCycle, *CY_ServerList, *ST_NameLength;
  185.     Object *EventList, *EventScriptString, *EventSoundString, *EventTestButton;
  186.     Object *MetaServerString, *ServerString, *PortString, *FirewallToggle;
  187. /*    Object *VersionString;*/
  188.     Object *DownloadQueueSlider, *UploadQueueSlider, *DownloadPriSlider, *UploadPriSlider;
  189.     Object *ST_QueueRetries, *ST_QueueDelay;
  190.     Object *SaveButton, *UseButton, *CancelButton;
  191.  
  192.     QueueClass = MUI_CreateCustomClass(NULL, MUIC_Slider, NULL, sizeof(struct QueueData), QueueDispatcher);
  193.  
  194.     if(pages[0] == (char *)_MSG_PRF_USER_TAB)
  195.         localize_array(pages);
  196.     if(events[0] == (char *)_MSG_PRF_EVT_START)
  197.         localize_array(events);
  198.     if(lamps[0] == (char *)_MSG_PRF_LAMPLAMP)
  199.         localize_array(lamps);
  200.     if(ServerListOpts[0] == (char *)_MSG_PRF_SERVERLIST_FORGET)
  201.         localize_array(ServerListOpts);
  202.  
  203.     if (obj = (Object *)DoSuperNew(cl, obj,
  204.         MUIA_HelpNode, "config",
  205.         MUIA_Window_Title, MSG_PRF_TITLE,
  206.         MUIA_Window_ID, MAKE_ID('S','E','T','T'),
  207.         WindowContents, VGroup,
  208.             Child, RegisterGroup(pages),
  209.             Child, VGroup,
  210.                 Child, ColGroup(2), GroupFrameT(MSG_PRF_ACCOUNT_FRAME),
  211.                     MUIA_HelpNode, "conf-user",
  212.                     Child, Label2(MSG_PRF_USERNAME),
  213.                     Child, UserString = StringObject,
  214.                         StringFrame,
  215.                         MUIA_String_AdvanceOnCR, TRUE,
  216.                         MUIA_CycleChain, 1,
  217.                         MUIA_ShortHelp, MSG_PRF_USERNAME_HELP,
  218.                     End,
  219.                     Child, Label2(MSG_PRF_PASSWORD),
  220.                     Child, PasswordString = StringObject,
  221.                         StringFrame,
  222.                         MUIA_String_AdvanceOnCR, TRUE,
  223.                         MUIA_String_Secret, TRUE,
  224.                         MUIA_CycleChain, 1,
  225.                         MUIA_ShortHelp, MSG_PRF_PASSWORD_HELP,
  226.                     End,
  227.                     Child, Label2(MSG_PRF_EMAIL),
  228.                     Child, HGroup,
  229.                         Child, EMailString = StringObject,
  230.                             StringFrame,
  231.                             MUIA_HorizWeight, 150,
  232.                             MUIA_String_AdvanceOnCR, TRUE,
  233.                             MUIA_CycleChain, 1,
  234.                             MUIA_ShortHelp, MSG_PRF_EMAIL_HELP,
  235.                         End,
  236.                         Child, EMailButton = SimpleButton(MSG_PRF_UPDATE_GAD),
  237.                             MUIA_ShortHelp, MSG_PRF_UPDATE_HELP,
  238.                     End,
  239.                     Child, Label2(MSG_PRF_CONNECTION),
  240.                     Child, LinkSpeedCycle = CycleObject,
  241.                         MUIA_Cycle_Active, prf->link,
  242.                         MUIA_Cycle_Entries, nap_linktype,
  243.                         MUIA_ShortHelp, MSG_PRF_CONNECTION_HELP,
  244.                     End,
  245.                 End,
  246.                 Child, ColGroup(2),
  247.                     Child, Label2(MSG_PRF_DLPATH),
  248.                     Child, HGroup,
  249.                         Child, DownloadPathString = PopaslObject,
  250.                             MUIA_Popstring_String, StringObject,
  251.                                 StringFrame,
  252.                                 MUIA_String_MaxLen, 256,
  253.                                 MUIA_CycleChain, 1,
  254.                                 MUIA_ShortHelp, MSG_PRF_DLPATH_HELP,
  255.                             End,
  256.                             MUIA_Popstring_Button, PopButton(MUII_PopFile),
  257.                             MUIA_Popasl_Type, ASL_FileRequest,
  258.                             ASLFR_TitleText, MSG_PRF_DLPATH_REQ,
  259.                             ASLFR_DrawersOnly, TRUE,
  260.                         End,
  261.                         Child, Label2(MSG_PRF_NAMELENGTH),
  262.                         Child, ST_NameLength = StringObject,
  263.                             StringFrame,
  264.                             MUIA_HorizWeight, 25,
  265.                             MUIA_String_Integer, prf->NameLength,
  266.                             MUIA_String_Accept, "0123456789",
  267.                             MUIA_String_MaxLen, 4,
  268.                             MUIA_CycleChain, 1,
  269.                             MUIA_ShortHelp, MSG_PRF_NAMELENGTH_HELP,
  270.                         End,
  271.                     End,
  272.                 End,
  273.             End,
  274.             Child, VGroup,
  275.                 MUIA_HelpNode, "conf-opts",
  276.                 Child, VGroup, GroupFrameT(MSG_PRF_MISC_FRAME),
  277.                     Child, maketoggle(MSG_PRF_AUTOCONNECT,  &AutoConnectToggle),
  278.                     Child, maketoggle(MSG_PRF_CLEARLIST,    &ClearListToggle  ),
  279.                     Child, maketoggle(MSG_PRF_ALWAYSASK,    &AskFileToggle    ),
  280.                     Child, maketoggle(MSG_PRF_ADDTOLIBRARY, &AutoAddToggle    ),
  281.                     Child, maketoggle(MSG_PRF_AUTOSAVELIB,  &AutoSaveToggle   ),
  282.                 End,
  283.                 Child, ColGroup(2),
  284.                     Child, Label2(MSG_PRF_SERVERLIST),
  285.                     Child, CY_ServerList = CycleObject,
  286.                         MUIA_Cycle_Active, prf->ServerList,
  287.                         MUIA_Cycle_Entries, ServerListOpts,
  288.                         MUIA_ShortHelp, MSG_PRF_SERVERLIST_HELP,
  289.                     End,
  290.                     Child, Label2(MSG_PRF_LAMPCLASS),
  291.                     Child, LampCycle = CycleObject,
  292.                         MUIA_Cycle_Active, prf->lamps,
  293.                         MUIA_Cycle_Entries, lamps,
  294.                         MUIA_ShortHelp, MSG_PRF_LAMPCLASS_HELP,
  295.                     End,
  296.                 End,
  297.             End,
  298.             Child, VGroup,
  299.                 MUIA_HelpNode, "conf-events",
  300.                 Child, NListviewObject,
  301.                     MUIA_NListview_NList, EventList = NListObject,
  302.                         InputListFrame,
  303.                         MUIA_NList_SourceArray, events,
  304.                     End,
  305.                 End,
  306.                 Child, ColGroup(2),
  307.                     Child, Label2(MSG_PRF_COMMAND),
  308.                     Child, EventScriptString = PopaslObject,
  309.                         MUIA_Popstring_String, StringObject,
  310.                             StringFrame,
  311.                             MUIA_String_MaxLen, 256,
  312.                             MUIA_CycleChain, 1,
  313.                             MUIA_ShortHelp, MSG_PRF_COMMAND_HELP,
  314.                         End,
  315.                         MUIA_Popstring_Button, PopButton(MUII_PopFile),
  316.                         MUIA_Popasl_Type, ASL_FileRequest,
  317.                         ASLFR_TitleText, MSG_PRF_SCRIPT_REQ,
  318.                     End,
  319.                     Child, Label2(MSG_PRF_SOUND),
  320.                     Child, HGroup,
  321.                         Child, EventSoundString = PopaslObject,
  322.                             MUIA_HorizWeight, 300,
  323.                             MUIA_Popstring_String, StringObject,
  324.                                 StringFrame,
  325.                                 MUIA_String_MaxLen, 256,
  326.                                 MUIA_CycleChain, 1,
  327.                             End,
  328.                             MUIA_Popstring_Button, PopButton(MUII_PopFile),
  329.                             MUIA_Popasl_Type, ASL_FileRequest,
  330.                             ASLFR_TitleText, MSG_PRF_SOUND_REQ,
  331.                         End,
  332.                         Child, EventTestButton = SimpleButton(MSG_PRF_SOUNDTEST_GAD),
  333.                     End,
  334.                 End,
  335.             End,
  336.             Child, VGroup,
  337.                 Child, VGroup, GroupFrameT(MSG_PRF_NETWORK_FRAME),
  338.                     Child, ColGroup(2),
  339.                         MUIA_HelpNode, "conf-adv",
  340.                         Child, Label2(MSG_PRF_MAINSERVER),
  341.                         Child, MetaServerString = StringObject,
  342.                             StringFrame,
  343.                             MUIA_String_AdvanceOnCR, TRUE,
  344.                             MUIA_CycleChain, 1,
  345.                             MUIA_ShortHelp, MSG_PRF_MAINSERVER_HELP,
  346.                         End,
  347.                         Child, Label2(MSG_PRF_MP3SERVER),
  348.                         Child, ServerString = StringObject,
  349.                             StringFrame,
  350.                             MUIA_String_AdvanceOnCR, TRUE,
  351.                             MUIA_CycleChain, 1,
  352.                             MUIA_ShortHelp, MSG_PRF_MP3SERVER_HELP,
  353.                         End,
  354. /*
  355.                         Child, Label2(MSG_PRF_VERSION),
  356.                         Child, VersionString = StringObject,
  357.                             StringFrame,
  358.                             MUIA_CycleChain, 1,
  359.                         End,
  360. */
  361.                         Child, Label2(MSG_PRF_LISTENPORT),
  362.                         Child, HGroup,
  363.                             Child, PortString = StringObject,
  364.                                 StringFrame,
  365.                                 MUIA_HorizWeight, 90,
  366.                                 MUIA_String_Integer, prf->port,
  367.                                 MUIA_String_Accept, "0123456789",
  368.                                 MUIA_String_MaxLen, 6,
  369.                                 MUIA_CycleChain, 1,
  370.                                 MUIA_ShortHelp, MSG_PRF_LISTENPORT_HELP,
  371.                             End,
  372.                             Child, Label2(MSG_PRF_BEHINDFW),
  373.                             Child, FirewallToggle = ImageObject,
  374.                                 ButtonFrame,
  375.                                 MUIA_HorizWeight, 10,
  376.                                 MUIA_Background, MUII_ButtonBack,
  377.                                 MUIA_InputMode, MUIV_InputMode_Toggle,
  378.                                 MUIA_ShowSelState, FALSE,
  379.                                 MUIA_Image_Spec, "6:15",
  380.                                 MUIA_Selected, FALSE,
  381.                                 MUIA_ShortHelp, MSG_PRF_BEHINDFW_HELP,
  382.                             End,
  383.                         End,
  384.                     End,
  385.                 End,
  386.                 Child, VGroup, GroupFrameT(MSG_PRF_TRANSFER_FRAME),
  387.                     Child, ColGroup(4),
  388.                         Child, Label2(MSG_PRF_DLQUEUE),
  389.                         Child, DownloadQueueSlider = NewObject(QueueClass->mcc_Class, 0,
  390.                             MUIA_Slider_Min, 1,
  391.                             MUIA_Slider_Max, 26,
  392.                             MUIA_Numeric_Value, 26,
  393.                             MUIA_CycleChain, 1,
  394.                             MUIA_ShortHelp, MSG_PRF_DLQUEUE_HELP,
  395.                             TAG_DONE),
  396.                         Child, Label2(MSG_PRF_TASKPRI),
  397.                         Child, DownloadPriSlider = NumericbuttonObject,
  398.                             MUIA_Numeric_Min, -128,
  399.                             MUIA_Numeric_Max, 0,
  400.                             MUIA_ShortHelp, MSG_PRF_TASKPRI_HELP,
  401.                         End,
  402.                         Child, Label2(MSG_PRF_ULQUEUE),
  403.                         Child, UploadQueueSlider = NewObject(QueueClass->mcc_Class, 0,
  404.                             MUIA_Slider_Min, 0,
  405.                             MUIA_Slider_Max, 26,
  406.                             MUIA_Numeric_Value, 5,
  407.                             MUIA_CycleChain, 1,
  408.                             MUIA_ShortHelp, MSG_PRF_ULQUEUE_HELP,
  409.                             TAG_DONE),
  410.                         Child, Label2(MSG_PRF_TASKPRI),
  411.                         Child, UploadPriSlider = NumericbuttonObject,
  412.                             MUIA_Numeric_Min, -128,
  413.                             MUIA_Numeric_Max, 0,
  414.                             MUIA_ShortHelp, MSG_PRF_TASKPRI_HELP,
  415.                         End,
  416.                     End,
  417.                     Child, HGroup,
  418.                         Child, Label2(MSG_PRF_RETRIES),
  419.                         Child, ST_QueueRetries = StringObject,
  420.                             StringFrame,
  421.                             MUIA_String_Integer, prf->QueueRetries,
  422.                             MUIA_String_Accept, "0123456789",
  423.                             MUIA_String_MaxLen, 6,
  424.                             MUIA_CycleChain, 1,
  425.                             MUIA_ShortHelp, MSG_PRF_RETRIES_HELP,
  426.                         End,
  427.                         Child, Label2(MSG_PRF_RETRYDELAY),
  428.                         Child, ST_QueueDelay = StringObject,
  429.                             StringFrame,
  430.                             MUIA_String_Integer, prf->QueueDelay,
  431.                             MUIA_String_Accept, "0123456789",
  432.                             MUIA_String_MaxLen, 6,
  433.                             MUIA_CycleChain, 1,
  434.                             MUIA_ShortHelp, MSG_PRF_RETRIES_HELP,
  435.                         End,
  436.                     End,
  437.                 End,
  438.             End,
  439.             End,
  440.             Child, HGroup,
  441.                 Child, SaveButton   = SimpleButton(MSG_PRF_SAVE_GAD  ),
  442.                 Child, UseButton    = SimpleButton(MSG_PRF_USE_GAD   ),
  443.                 Child, CancelButton = SimpleButton(MSG_PRF_CANCEL_GAD),
  444.             End,
  445.  
  446.         End,
  447.         TAG_MORE, msg->ops_AttrList))
  448.     {
  449.         data = INST_DATA(cl,obj);
  450.  
  451.         data->UserString          = UserString;
  452.         data->PasswordString      = PasswordString;
  453.         data->EMailString         = EMailString;
  454.         data->DownloadPathString  = DownloadPathString;
  455.         data->LinkSpeedCycle      = LinkSpeedCycle;
  456.  
  457.         data->ClearListToggle     = ClearListToggle;
  458.         data->AutoConnectToggle   = AutoConnectToggle;
  459.         data->AskFileToggle       = AskFileToggle;
  460.         data->AutoSaveToggle      = AutoSaveToggle;
  461.         data->AutoAddToggle       = AutoAddToggle;
  462.         data->LampCycle           = LampCycle;
  463.         data->CY_ServerList       = CY_ServerList;
  464.         data->ST_NameLength       = ST_NameLength;
  465.  
  466.         data->EventList           = EventList;
  467.         data->EventScriptString   = EventScriptString;
  468.         data->EventSoundString    = EventSoundString;
  469.  
  470.         data->MetaServerString    = MetaServerString;
  471.         data->ServerString        = ServerString;
  472. /*        data->VersionString       = VersionString;*/
  473.         data->PortString          = PortString;
  474.         data->FirewallToggle      = FirewallToggle;
  475.         data->DownloadQueueSlider = DownloadQueueSlider;
  476.         data->DownloadPriSlider   = DownloadPriSlider;
  477.         data->UploadQueueSlider   = UploadQueueSlider;
  478.         data->UploadPriSlider     = UploadPriSlider;
  479.         data->ST_QueueRetries     = ST_QueueRetries;
  480.         data->ST_QueueDelay       = ST_QueueDelay;
  481.  
  482.         data->lastitem = -1;
  483.  
  484.         DoMethod(EMailButton,     MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, PRF_UPDATE);
  485.         DoMethod(EventList,       MUIM_Notify, MUIA_NList_EntryClick, MUIV_EveryTime, obj, 1, PRF_ENTRY);
  486.         DoMethod(EventTestButton, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, PRF_TESTSND);
  487.         DoMethod(FirewallToggle,  MUIM_Notify, MUIA_Selected, MUIV_EveryTime, obj, 1, PRF_FIREWALL);
  488.  
  489.         DoMethod(ST_QueueDelay,   MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, obj, 1, PRF_VALIDDELAY);
  490.  
  491.         DoMethod(SaveButton,     MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_SAVE  );
  492.         DoMethod(UseButton,      MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_USE   );
  493.         DoMethod(CancelButton,   MUIM_Notify, MUIA_Pressed, FALSE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_CANCEL);
  494.  
  495.         DoMethod(obj, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, gui->iconpanel, 2, PANEL_CLOSEPRF, PRF_CANCEL);
  496.  
  497.         return((ULONG)obj);
  498.     }
  499.     return(0);
  500. }
  501.  
  502.  
  503. void prf_set(struct prfdata *data)
  504. {
  505.     set(data->UserString,         MUIA_String_Contents, prf->user);
  506.     set(data->PasswordString,     MUIA_String_Contents, prf->pass);
  507.     set(data->EMailString,        MUIA_String_Contents, prf->email);
  508.     set(data->DownloadPathString, MUIA_String_Contents, prf->dlpath);
  509.     set(data->LinkSpeedCycle,     MUIA_Cycle_Active,    prf->link);
  510.  
  511.     set(data->ClearListToggle,   MUIA_Selected,       prf->clrlist);
  512.     set(data->AutoConnectToggle, MUIA_Selected,       prf->autocon);
  513.     set(data->AskFileToggle,     MUIA_Selected,       prf->askfile);
  514.     set(data->AutoAddToggle,     MUIA_Selected,       prf->autoadd);
  515.     set(data->AutoSaveToggle,    MUIA_Selected,       prf->autosave);
  516.     set(data->LampCycle,         MUIA_Cycle_Active,   prf->lamps);
  517.     set(data->CY_ServerList,     MUIA_Cycle_Active,   prf->ServerList);
  518.     set(data->ST_NameLength,     MUIA_String_Integer, prf->NameLength);
  519.  
  520.     set(data->MetaServerString, MUIA_String_Contents, prf->mainserver);
  521.     set(data->ServerString,     MUIA_String_Contents, prf->server);
  522. /*    set(data->VersionString,    MUIA_String_Contents, prf->napvers);*/
  523.     set(data->PortString, MUIA_String_Integer, prf->port);
  524.     if (prf->port)
  525.         set(data->FirewallToggle, MUIA_Selected, FALSE);
  526.     else {
  527.         set(data->FirewallToggle, MUIA_Selected, TRUE);
  528.         set(data->PortString, MUIA_String_Integer, PRF_DEFAULT_PORT);
  529.     }
  530.     set(data->DownloadQueueSlider, MUIA_Numeric_Value,  prf->DownloadQueueLimit);
  531.     set(data->DownloadPriSlider,   MUIA_Numeric_Value,  prf->DownloadTaskPri   );
  532.     set(data->UploadQueueSlider,   MUIA_Numeric_Value,  prf->UploadQueueLimit  );
  533.     set(data->UploadPriSlider,     MUIA_Numeric_Value,  prf->UploadTaskPri     );
  534.     set(data->ST_QueueRetries,     MUIA_String_Integer, prf->QueueRetries      );
  535.     set(data->ST_QueueDelay,       MUIA_String_Integer, prf->QueueDelay        );
  536. }
  537.  
  538.  
  539. void prf_use(struct prfdata *data)
  540. {
  541.     u_long tmp, tmp2;
  542.  
  543.     /* Advanced */
  544.  
  545.     GetAttr(MUIA_String_Acknowledge, data->MetaServerString, &tmp);
  546.     if (((char*)tmp)[0]==0) prf->mainserver=NULL; else prf->mainserver=strdup((char*)tmp);
  547.  
  548.     GetAttr(MUIA_String_Acknowledge, data->ServerString, &tmp);
  549.     if (((char*)tmp)[0]==0) prf->server=NULL; else prf->server=strdup((char*)tmp);
  550.  
  551. /*
  552.     GetAttr(MUIA_String_Acknowledge, data->VersionString, &tmp);
  553.     if (((char*)tmp)[0]==0) prf->napvers=NULL; else prf->napvers=strdup((char*)tmp);
  554. */
  555.  
  556.     GetAttr(MUIA_Selected, data->FirewallToggle, &tmp);
  557.     if (!tmp) {
  558.         GetAttr(MUIA_String_Integer, data->PortString, &tmp);
  559.         prf->port = (int)tmp;
  560.     }
  561.     else prf->port = 0;
  562.  
  563.     GetAttr(MUIA_Numeric_Value, data->DownloadQueueSlider, &tmp);
  564.     prf->DownloadQueueLimit = tmp;
  565.  
  566.     GetAttr(MUIA_Numeric_Value, data->DownloadPriSlider, &tmp);
  567.     prf->DownloadTaskPri = tmp;
  568.  
  569.     GetAttr(MUIA_Numeric_Value, data->UploadQueueSlider, &tmp);
  570.     prf->UploadQueueLimit = tmp;
  571.  
  572.     GetAttr(MUIA_Numeric_Value, data->UploadPriSlider, &tmp);
  573.     prf->UploadTaskPri = tmp;
  574.  
  575.     GetAttr(MUIA_String_Integer, data->ST_QueueRetries, &tmp);
  576.     prf->QueueRetries = (int)tmp;
  577.  
  578.     GetAttr(MUIA_String_Integer, data->ST_QueueDelay, &tmp);
  579.     if ((int)tmp > 0) {
  580.         prf->QueueDelay = (int)tmp;
  581.         DoMethod(gui->dwin, DL_SETDELAY, prf->QueueDelay);
  582.     }
  583.  
  584.     /* User */
  585.  
  586.     GetAttr(MUIA_String_Acknowledge, data->UserString, &tmp);
  587.     if (((char*)tmp)[0]==0) prf->user=NULL; else prf->user=strdup((char*)tmp);
  588.  
  589.     GetAttr(MUIA_String_Acknowledge, data->PasswordString, &tmp);
  590.     if (((char*)tmp)[0]==0) prf->pass=NULL; else prf->pass=strdup((char*)tmp);
  591.  
  592.     GetAttr(MUIA_String_Acknowledge, data->EMailString, &tmp);
  593.     if (((char*)tmp)[0]==0) prf->email=NULL; else prf->email=strdup((char*)tmp);
  594.  
  595.     GetAttr(MUIA_String_Acknowledge, data->DownloadPathString, &tmp);
  596.     if (((char*)tmp)[0]==0) prf->dlpath=NULL; else prf->dlpath=strdup((char*)tmp);
  597.  
  598.     /* Options */
  599.  
  600.     GetAttr(MUIA_Cycle_Active, data->LinkSpeedCycle, &tmp);
  601.     prf->link = tmp;
  602.  
  603.     GetAttr(MUIA_Selected, data->ClearListToggle, &tmp);
  604.     prf->clrlist = tmp;
  605.  
  606.     GetAttr(MUIA_Selected, data->AutoConnectToggle, &tmp);
  607.     prf->autocon = tmp;
  608.  
  609.     GetAttr(MUIA_Selected, data->AskFileToggle, &tmp);
  610.     prf->askfile = tmp;
  611.  
  612.     GetAttr(MUIA_Selected, data->AutoAddToggle, &tmp);
  613.     prf->autoadd = tmp;
  614.  
  615.     GetAttr(MUIA_Selected, data->AutoSaveToggle, &tmp);
  616.     prf->autosave = tmp;
  617.  
  618.     GetAttr(MUIA_Cycle_Active, data->LampCycle, &tmp);
  619.     prf->lamps = tmp;
  620.  
  621.     GetAttr(MUIA_Cycle_Active, data->CY_ServerList, &tmp);
  622.     prf->ServerList = tmp;
  623.  
  624.     GetAttr(MUIA_String_Integer, data->ST_NameLength, &tmp);
  625.     if ((int)tmp > 7 && (int)tmp < 108) prf->NameLength = (int)tmp;
  626.  
  627.     /* Events */
  628.  
  629.     GetAttr(MUIA_NList_Active, data->EventList, &tmp);
  630.     if (tmp != MUIV_NList_Active_Off) {
  631.         if (prf_eventflags[tmp]&1) {
  632.             GetAttr(MUIA_String_Contents, data->EventScriptString, &tmp2);
  633.             if (((char*)tmp2)[0]==0) prf->scripts[tmp]=NULL;
  634.             else prf->scripts[tmp]=strdup((char*)tmp2);
  635.         }
  636.         if (prf_eventflags[tmp]&2) {
  637.             GetAttr(MUIA_String_Contents, data->EventSoundString, &tmp2);
  638.             if (((char*)tmp2)[0]==0) prf->sounds[tmp]=NULL;
  639.             else prf->sounds[tmp]=strdup((char*)tmp2);
  640.         }
  641.     }
  642.  
  643.     prf_save("ENV:"AMSTER_PREFS);
  644. }
  645.  
  646.  
  647. void prf_setup(int argc, char *argv[])
  648. {
  649.     memset(prf,0,sizeof(struct prefsdata));
  650.  
  651.     /* defaults */
  652.     prf->mainserver = "server.napster.com:8875";
  653.     prf->napvers = "Amster "AMSTER_VERSION;
  654.     prf->port = PRF_DEFAULT_PORT;
  655.     prf->email = "anon@napster.com";
  656.     prf->dlpath = "SYS:";
  657.     prf->link = 0;
  658.     prf->NameLength = 107;
  659.     prf->DownloadQueueLimit = 26;
  660.     prf->UploadQueueLimit = 2;
  661.     prf->UploadTaskPri = -1;
  662.     prf->QueueRetries = 180;
  663.     prf->QueueDelay = 20;
  664.     prf->regflag = 1;    /*  >:)  */
  665. }
  666.  
  667.  
  668. BOOL prf_load(char *fname)
  669. {
  670.     FILE *f;
  671.     char tmp[100], *s, *c;
  672.     int i;
  673.     u_long t;
  674.  
  675.     f=fopen(fname,"r");
  676.     if(f==0) return FALSE;
  677.  
  678.     while (fgets(tmp, sizeof(tmp), f)) {
  679.         s = strtok(tmp," ");
  680.         if(!s) {
  681.             continue;
  682.         }
  683.         else if (strcmp(s, "<search>")==0) {
  684.             while(fgets(tmp, sizeof(tmp), f)) {
  685.                 s = &tmp[0];
  686.                 c = nap_token(&s);
  687.                 if(!c) continue;
  688.                 else if(strcmp(c,"</search>")==0) break;
  689.                 else if(strcmp(c,"max")==0) {
  690.                     t = nap_ltoken(&s);
  691.                     if(t>2 && t<1000) prf->max = t;
  692.                 }
  693.                 else if(strcmp(c,"advopts")==0) {
  694.                     prf->speedqual   = nap_ltoken(&s);
  695.                     prf->speedval    = nap_ltoken(&s);
  696.                     prf->bitratequal = nap_ltoken(&s);
  697.                     prf->bitrateval  = nap_ltoken(&s);
  698.                     prf->freqqual    = nap_ltoken(&s);
  699.                     prf->freqval     = nap_ltoken(&s);
  700.                 }
  701.             }
  702.         } else if(strcmp(s,"noiconpanel")==0) {
  703.             prf->noiconpanel = 1;
  704.         } else if(strcmp(s,"mainserver")==0) {
  705.             if(s=strtok(NULL,"\n")) prf->mainserver=strdup(s);
  706.         } else if(strcmp(s,"server")==0) {
  707.             if(s=strtok(NULL,"\n")) prf->server=strdup(s);
  708. /*
  709.         } else if(strcmp(s,"napvers")==0) {
  710.             if(s=strtok(NULL,"\n")) prf->napvers=strdup(s);
  711. */
  712.         } else if(strcmp(s,"listport")==0) {
  713.             if(s=strtok(NULL,"\n")) prf->port = atoi(s);
  714.         } else if(strcmp(s,"downloadqueue")==0) {
  715.             if(s=strtok(NULL,"\n")) prf->DownloadQueueLimit = atoi(s);
  716.         } else if(strcmp(s,"downloadpriority")==0) {
  717.             if(s=strtok(NULL,"\n")) prf->DownloadTaskPri = atoi(s);
  718.         } else if(strcmp(s,"uploadqueue")==0) {
  719.             if(s=strtok(NULL,"\n")) prf->UploadQueueLimit = atoi(s);
  720.         } else if(strcmp(s,"uploadpriority")==0) {
  721.             if(s=strtok(NULL,"\n")) prf->UploadTaskPri = atoi(s);
  722.         } else if(strcmp(s,"queueretries")==0) {
  723.             if(s=strtok(NULL,"\n")) prf->QueueRetries = atoi(s);
  724.         } else if(strcmp(s,"queuedelay")==0) {
  725.             if(s=strtok(NULL,"\n")) {
  726.                 t = atoi(s);
  727.                 if (t > 0) prf->QueueDelay = t;
  728.             }
  729.  
  730.         } else if(strcmp(s,"script")==0) {
  731.             if(s=strtok(NULL," ")) {
  732.                 i = atoi(s);
  733.                 if(i>0 && i<9 && (s=strtok(NULL,"\n")))
  734.                     prf->scripts[i-1] = strdup(s);
  735.             }
  736.  
  737.         } else if(strcmp(s,"sound")==0) {
  738.             if(s=strtok(NULL," ")) {
  739.                 i = atoi(s);
  740.                 if(i>0 && i<8 && (s=strtok(NULL,"\n")))
  741.                     prf->sounds[i-1] = strdup(s);
  742.             }
  743.  
  744.         } else if(strcmp(s,"user")==0) {
  745.             if(s=strtok(NULL,"\n")) prf->user=strdup(s);
  746.         } else if(strcmp(s,"pass")==0) {
  747.             if(s=strtok(NULL,"\n")) prf->pass=strdup(s);
  748.         } else if(strcmp(s,"email")==0) {
  749.             if(s=strtok(NULL,"\n")) prf->email=strdup(s);
  750.         } else if(strcmp(s,"dlpath")==0) {
  751.             if(s=strtok(NULL,"\n")) prf->dlpath=strdup(s);
  752.         } else if(strcmp(s,"linktype")==0) {
  753.             if(s=strtok(NULL,"\n")) prf->link=atoi(s);
  754.         } else if(strcmp(s,"optclrlist")==0) {
  755.             prf->clrlist = 1;
  756.         } else if(strcmp(s,"autoconnect")==0) {
  757.             prf->autocon = 1;
  758.         } else if(strcmp(s,"fullpath")==0) {
  759.             prf->fullpath = 1;
  760.         } else if(strcmp(s,"alwaysaskfilename")==0) {
  761.             prf->askfile = 1;
  762.         } else if(strcmp(s,"autoaddshares")==0) {
  763.             prf->autoadd = 1;
  764.         } else if(strcmp(s,"autosaveshares")==0) {
  765.             prf->autosave = 1;
  766.         } else if(strcmp(s,"lamptype")==0) {
  767.             if(s=strtok(NULL,"\n")) prf->lamps=atoi(s);
  768.         } else if(strcmp(s,"serverlist")==0) {
  769.             if(s=strtok(NULL,"\n")) prf->ServerList=atoi(s);
  770.         } else if(strcmp(s,"namelength")==0) {
  771.             if(s=strtok(NULL,"\n")) {
  772.                 t = atoi(s);
  773.                 if (t > 7 && t < 108) prf->NameLength = t;
  774.             }
  775.         }
  776.     }
  777.     fclose(f);
  778.  
  779.     return TRUE;
  780. }
  781.  
  782.  
  783. void prf_save(char *fname)
  784. {
  785.     FILE *f;
  786.     u_long tmp;
  787.     int i;
  788.  
  789.     f=fopen(fname,"w");
  790.     if(f==0) {
  791.         gui_debug((char *)MSG_ERROR_SAVE);
  792.         return;
  793.     }
  794.  
  795.     GetAttr(MUIA_Menuitem_Checked,gui->iconpanelmenu,&tmp);
  796.     if(tmp==FALSE) fprintf(f,"noiconpanel \n");
  797.  
  798.     /* Advanced */
  799.     if (prf->mainserver) fprintf(f, "mainserver %s\n", prf->mainserver);
  800.     if (prf->server) fprintf(f, "server %s\n", prf->server);
  801. /*
  802.     if (prf->napvers) fprintf(f, "napvers %s\n", prf->napvers);
  803. */
  804.     fprintf(f, "listport %d\n", prf->port);
  805.     fprintf(f, "downloadqueue %d\n", prf->DownloadQueueLimit);
  806.     fprintf(f, "downloadpriority %d\n", prf->DownloadTaskPri);
  807.     fprintf(f, "uploadqueue %d\n", prf->UploadQueueLimit);
  808.     fprintf(f, "uploadpriority %d\n", prf->UploadTaskPri);
  809.     fprintf(f, "queueretries %d\n", prf->QueueRetries);
  810.     fprintf(f, "queuedelay %d\n", prf->QueueDelay);
  811.  
  812.     /* User */
  813.     if(prf->user) fprintf(f,"user %s\n",prf->user);
  814.     if(prf->pass) fprintf(f,"pass %s\n",prf->pass);
  815.     if(prf->email) fprintf(f,"email %s\n",prf->email);
  816.     if(prf->dlpath) fprintf(f,"dlpath %s\n",prf->dlpath);
  817.     fprintf(f,"linktype %d\n",prf->link);
  818.  
  819.     /* Options */
  820.     if(prf->clrlist) fprintf(f,"optclrlist \n");
  821.     if(prf->autocon) fprintf(f,"autoconnect \n");
  822.     if(prf->fullpath) fprintf(f,"fullpath \n");
  823.     if(prf->askfile) fprintf(f,"alwaysaskfilename \n");
  824.     if(prf->autoadd) fprintf(f,"autoaddshares \n");
  825.     if(prf->autosave) fprintf(f,"autosaveshares \n");
  826.     fprintf(f, "lamptype %d\n", prf->lamps);
  827.     fprintf(f, "serverlist %d\n", prf->ServerList);
  828.     fprintf(f, "namelength %d\n", prf->NameLength);
  829.  
  830.     for(i=0;i<8;i++) {
  831.         if(prf->scripts[i]) fprintf(f, "script %d %s\n", i+1, prf->scripts[i]);
  832.         if(prf->sounds[i]) fprintf(f, "sound %d %s\n", i+1, prf->sounds[i]);
  833.     }
  834.  
  835.     DoMethod(gui->searchpanel, SEARCH_GET);
  836.  
  837.     fprintf(f,"<search> \n");
  838.     fprintf(f,"advopts");
  839.     fprintf(f," %d",prf->speedqual);
  840.     fprintf(f," %d",prf->speedval);
  841.     fprintf(f," %d",prf->bitratequal);
  842.     fprintf(f," %d",prf->bitrateval);
  843.     fprintf(f," %d",prf->freqqual);
  844.     fprintf(f," %d\n",prf->freqval);
  845.     fprintf(f,"max %d\n",prf->max);
  846.     fprintf(f,"</search>\n");
  847.  
  848.     fclose(f);
  849. }
  850.  
  851.  
  852. void prf_entry(struct prfdata *data)
  853. {
  854.     u_long tmp,tmp2;
  855.  
  856.     GetAttr(MUIA_NList_EntryClick, data->EventList, &tmp);
  857.     set(data->EventScriptString, MUIA_Disabled, FALSE);
  858.     set(data->EventSoundString,  MUIA_Disabled, FALSE);
  859.     if(tmp==-1 || tmp==-2) return;
  860.  
  861.     if (data->lastitem != -1) {
  862.         int i = data->lastitem;
  863.         if (prf_eventflags[i]&1) {
  864.             GetAttr(MUIA_String_Contents, data->EventScriptString, &tmp2);
  865.             if(((char*)tmp2)[0]==0) prf->scripts[i]=NULL; else prf->scripts[i]=strdup((char*)tmp2);
  866.         }
  867.         if (prf_eventflags[i]&2) {
  868.             GetAttr(MUIA_String_Contents, data->EventSoundString, &tmp2);
  869.             if(((char*)tmp2)[0]==0) prf->sounds[i]=NULL; else prf->sounds[i]=strdup((char*)tmp2);
  870.         }
  871.     }
  872.     data->lastitem = tmp;
  873.  
  874.     set(data->EventScriptString, MUIA_String_Contents, prf->scripts[tmp]);
  875.     set(data->EventSoundString,  MUIA_String_Contents, prf->sounds[tmp]);
  876.  
  877.     if (!(prf_eventflags[tmp]&1))
  878.         set(data->EventScriptString,MUIA_Disabled,TRUE);
  879.     if (!(prf_eventflags[tmp]&2))
  880.         set(data->EventSoundString,MUIA_Disabled,TRUE);
  881. }
  882.  
  883.  
  884. void prf_event(int no)
  885. {
  886.     if(prf_eventflags[no]&2 && prf->sounds[no])
  887.         snd_play(prf->sounds[no]);
  888. }
  889.